]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
keyboard: Trigger OSK level changes on button release
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 15 Apr 2022 17:47:09 +0000 (19:47 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 10 Aug 2022 17:11:26 +0000 (17:11 +0000)
Keep it consistent with the rest of the actions. For long press
handling (i.e. shift turning to caps lock), this also means the
release action should be cancelled after any long press, to prevent
both from taking effect at the same time.

Prior to this commit, we used to switch level (and hide the button
being pressed) on button press, which made its long press handler
never get a paired release and end up triggering caps lock.
Performing the action on release ensures the shift key button does
not fall into this situation, making this issue moot.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2278>

js/ui/keyboard.js

index e7d4fc3ba9cf3ca3da1f2eb581bf2d666c05df27..dd5607a7a3329d9fb9318835adcdf340518d4645 100644 (file)
@@ -1501,21 +1501,21 @@ var Keyboard = GObject.registerClass({
                     this._setActiveLayer(0);
             });
             if (key.action !== null) {
-                button.connect('pressed', () => {
-                    if (key.action === 'levelSwitch') {
-                        this._setActiveLayer(key.level);
-                        this._setLatched (
-                            key.level === 1 &&
-                                key.iconName === 'keyboard-caps-lock-symbolic');
-                    }
-                });
                 button.connect('released', () => {
-                    if (key.action === 'hide')
+                    if (key.action === 'hide') {
                         this.close();
-                    else if (key.action === 'languageMenu')
+                    } else if (key.action === 'languageMenu') {
                         this._popupLanguageMenu(button);
-                    else if (key.action === 'emoji')
+                    } else if (key.action === 'emoji') {
                         this._toggleEmoji();
+                    } else if (!this._longPressed && key.action === 'levelSwitch') {
+                        this._setActiveLayer(key.level);
+                        this._setLatched(
+                            key.level === 1 &&
+                                key.iconName === 'keyboard-caps-lock-symbolic');
+                    }
+
+                    this._longPressed = false;
                 });
             }
 
@@ -1523,8 +1523,11 @@ var Keyboard = GObject.registerClass({
                 key.iconName === 'keyboard-shift-symbolic') {
                 layout.shiftKeys.push(button);
                 if (key.level === 1) {
-                    button.connect('long-press',
-                        () => this._setLatched(true));
+                    button.connect('long-press', () => {
+                        this._setActiveLayer(key.level);
+                        this._setLatched(true);
+                        this._longPressed = true;
+                    });
                 }
             }